#ifndef _CENTIDAD_H
#define _CENTIDAD_H

#include "md2.h"
#include "escenario.h"

#define MOD_X 0.5
#define MOD_Y 0.65

/*------------------------------------------------------------------------------
	Implements entities
	This is a base class to implements objects and characters
------------------------------------------------------------------------------*/
class CEntidad
{
	CMd2	*m_pModelo;
	char 	m_sNombre[255];	
	float	m_fX;
	float	m_fY;
	float	m_fZ;
	float	m_fRotX;
	float	m_fRotY;
	float	m_fRotZ;
	float	m_fEscalaX;
	float	m_fEscalaY;
	float	m_fEscalaZ;
	float 	m_fYCelda;
	float   m_aColor[3];
	Bool	m_bTransparente;
	Bool	m_bVivo;
	CEscenario *m_pEscenario;
	
public:

	CEntidad();	
	~CEntidad();
	void Liberar();
	void Dibujar(unsigned int uiFrame=0);
	Bool DentroCamara();
	Bool Colisiona(CEntidad *pEntidad);
	Bool Colisiona(float x,float y,float ancho,float alto);
	
	/*---------------------------------
	 get Functions
	---------------------------------*/
	float getDistanciaSuelo();
	float getDistanciaPared();
	
	/*---------------------------------
	 set Functions
	---------------------------------*/
	void setX(float fX){m_fX=fX;}
	void setY(float fY){m_fY=fY;}
	void setZ(float fZ){m_fZ=fZ;}
	void setRotX(float fRotX);
	void setRotY(float fRotY);
	void setRotZ(float fRotZ);
	void setEscalaX(float fEscalaX){m_fEscalaX=fEscalaX;}
	void setEscalaY(float fEscalaY){m_fEscalaY=fEscalaY;}
	void setEscalaZ(float fEscalaZ){m_fEscalaZ=fEscalaZ;}
	void setTransparente(Bool fTransparente){m_bTransparente=fTransparente;}
	void setColor(float fR,float fG,float fB){m_aColor[0]=fR;m_aColor[1]=fB;m_aColor[2]=fG;}
	void setModelo(CMd2 *pModelo){m_pModelo=pModelo;}
	void setEscenario(CEscenario *pEscenario)	{m_pEscenario=pEscenario;}
	void setVivo(Bool bVivo){m_bVivo=bVivo;}
	void setDelineado(Bool valor){if(m_pModelo)m_pModelo->setDelineado(valor);}
	
	/*---------------------------------
	 Funciones de acceso a atributos
	---------------------------------*/
	float getX()		{return m_fX;}
	float getY()		{return m_fY;}
	float getZ()		{return m_fZ;}	
	float getRotX()		{return m_fRotX;}
	float getRotY()		{return m_fRotY;}
	float getRotZ()		{return m_fRotZ;}
	float getEscalaX()	{return m_fEscalaX;}
	float getEscalaY()	{return m_fEscalaY;}
	float getEscalaZ()	{return m_fEscalaZ;}
	float getMaxX()		{return (m_pModelo->getMaxX()*m_fEscalaX);}
	float getMinX()		{return (m_pModelo->getMinX()*m_fEscalaX);}
	float getMaxY()		{return (m_pModelo->getMaxY()*m_fEscalaY);}
	float getMinY()		{return (m_pModelo->getMinY()*m_fEscalaY);}	
	float getYCelda()	{return m_fYCelda;}
	CEscenario *getEscenario(){return m_pEscenario;}
	float getVivo()		{return m_bVivo;}
	float getColorR()	{return m_aColor[0];}
	float getColorG()	{return m_aColor[1];}
	float getColorB()	{return m_aColor[2];}
	
};

#endif
